tanh

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2026.01.03
조회수
10
버전
v1

tanh

개요

tanh(하이퍼볼릭 탄젠트, Hyperbolic Tangent)는 인공신경망에서 널리 사용되는 비선형 활성화 함수 중 하나입니다. 수학적으로는 입력값에 대한 하이퍼볼릭 탄젠트 값을 출력하며, 출력 범위가 -1에서 1 사이로 제한된다는 특징을 가지고 있습니다. 이는 신경망의 학습 안정성과 수렴 속도에 긍정적인 영향을 미칠 수 있어, 특히 초기 신경망 모델에서 자주 사용되었습니다.

tanh는 시그모이드(Sigmoid) 함수와 유사한 S자 형태의 곡선을 가지지만, 출력 범위가 대칭적이라는 점에서 차이가 있으며, 이로 인해 제로 중심(zero-centered) 출력을 제공하여 역전파(Backpropagation) 과정에서 기울기 업데이트가 더 효율적으로 이루어질 수 있습니다.


수학적 정의

tanh 함수는 다음과 같은 수학적 식으로 정의됩니다:

$$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = \frac{\sinh(x)}{\cosh(x)} $$

또는 시그모이드 함수 $ \sigma(x) $를 이용해 다음과 같이 표현할 수도 있습니다:

$$ \tanh(x) = 2\sigma(2x) - 1 $$

특징

  • 정의역: $ x \in (-\infty, +\infty) $
  • 치역: $ y \in (-1, 1) $
  • 기울기(도함수):
    $$ \frac{d}{dx}\tanh(x) = 1 - \tanh^2(x) $$ 이 도함수는 입력값이 0 근처일 때 기울기가 1에 가까우며, 입력값이 커질수록 기울기가 0에 수렴합니다.

신경망에서의 역할

활성화 함수로서의 기능

신경망의 각 뉴런은 가중합을 계산한 후 활성화 함수를 적용하여 출력을 결정합니다. tanh는 이 과정에서 다음과 같은 역할을 수행합니다:

  • 비선형성 도입: 선형 함수만 사용할 경우 신경망은 단일 계층과 동일한 표현력을 가지게 됩니다. tanh는 비선형 함수이므로, 깊은 신경망이 복잡한 패턴을 학습할 수 있도록 합니다.
  • 출력 정규화: 입력값이 크거나 작을수록 출력이 각각 1 또는 -1에 수렴하므로, 신호의 크기를 제한하여 수치적 안정성을 제공합니다.
  • 제로 중심 출력: 출력이 0을 중심으로 대칭적이므로, 다음 레이어의 입력 분포가 균형을 이루게 되어 기울기 소실(vanishing gradient) 문제를 부분적으로 완화할 수 있습니다.

장점과 단점

장점

장점 설명
제로 중심 출력 평균이 0에 가까운 출력을 생성하므로, 다음 레이어의 가중치 업데이트가 더 안정적임
비선형성 복잡한 데이터 패턴 학습 가능
미분 가능성 모든 지점에서 미분 가능하여 역전파 알고리즘에 적합

단점

단점 설명
기울기 소실 문제 입력값이 매우 크거나 작을 경우 기울기가 거의 0이 되어, 깊은 네트워크에서 역전파 시 그래디언트가 사라질 수 있음
계산 비용 지수 함수를 포함하므로 ReLU와 같은 단순 함수보다 계산이 복잡함
출력 포화 입력이 커지면 출력이 포화되어 변화가 거의 없음 → 학습 정체 유발 가능

tanh vs. 다른 활성화 함수

함수 출력 범위 제로 중심 기울기 소실 계산 복잡도 주요 사용처
tanh (-1, 1) 중간 중간 RNN, 전통적 DNN
Sigmoid (0, 1) 심함 중간 이진 분류 출력층
ReLU [0, ∞) 없음 (양수 구간) 낮음 CNN, DNN 일반 레이어
Leaky ReLU (-∞, ∞) 약함 낮음 ReLU의 대안

사용 사례

  • 순환 신경망(RNN): RNN의 내부 상태 업데이트에 tanh가 자주 사용됩니다. 예를 들어, 전통적인 LSTM에서는 셀 상태(candidate cell state) 계산에 tanh 함수를 적용합니다.
  • 자기회귀 모델: 과거 정보를 요약하는 구조에서 출력의 대칭성이 유리하게 작용합니다.
  • 생성 모델: 생성적 적대 신경망(GAN)이나 오토인코더의 일부 레이어에서 사용되기도 합니다.

코드 예시 (Python)

import numpy as np
import matplotlib.pyplot as plt

def tanh(x):
    return np.tanh(x)

def tanh_derivative(x):
    return 1 - np.tanh(x) ** 2

# 시각화
x = np.linspace(-5, 5, 100)
y = tanh(x)
dy = tanh_derivative(x)

plt.figure(figsize=(10, 6))
plt.plot(x, y, label='tanh(x)', color='blue')
plt.plot(x, dy, label="tanh'(x)", color='red', linestyle='--')
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True)
plt.title('tanh 함수와 그 도함수')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()


참고 자료 및 관련 문서

참고: 최근에는 ReLU 및 그 변형(GELU, Swish 등)이 대부분의 심층 신경망에서 tanh를 대체하고 있으나, 여전히 특정 아키텍처(RNN 기반 모델 등)에서는 유용하게 사용되고 있습니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?